I wrote this code to send messages to everyone on the server.
The text isn't appearing in a button though, but as a Race Control Message.
<?php 
CatchEvent OnMSO( $userName, $text ) # Player event
    $idxOfFirtsSpace = indexOf( $text, " ");
    IF( $idxOfFirtsSpace == -1 ) THEN
      $command = $text;
      $argv = "";
    ELSE
      $command = subStr( $text,0,$idxOfFirtsSpace );
      $argv = trim( subStr( $text,$idxOfFirtsSpace ) );
    ENDIF
    SWITCH( $command )
        CASE "!msg":
            IF( UserInGroup( "admin", $userName ) == 1 )
            THEN
              openPrivButton( "send_msg",52,0,48,5,5,-1,32,"^3Click to resend message: %nl%" .GetCurrentPlayerVar ("message"),rcm_msg );
              openPrivButton( "write_send_msg_bg",100,0,48,10,5,-1,32,"" );
              openPrivTextButton( "write_send_msg",100,5,48,5,5,0,"^3Write message and click OK (max. 50 characters)","^2Click to type and send a message",50,rcm_written_msg );
              openPrivButton( "close_msg",148,0,10,10,5,-1,32,"^1X",close_msg );
            ELSE
              privMsg( "^1You are not allowed to open that");
            ENDIF
            BREAK;
    ENDSWITCH
EndCatchEvent
Sub rcm_written_msg ( $KeyFlags , $message )
    SetCurrentPlayerVar ("message", "^2".$message);
    cmdLFS ( "/rcm ^2" . $message );
    cmdLFS ( "/rcm_all" );
    openPrivButton( "send_msg",52,0,48,5,5,-1,32,"^3Resend message: %nl%^8" .GetCurrentPlayerVar ("message"),rcm_msg );
EndSub
Sub rcm_msg ( $KeyFlags , $argv )
    cmdLFS ( "/rcm ^2" . GetCurrentPlayerVar ( "message" ) );
    cmdLFS ( "/rcm_all" );
EndSub
Sub close_msg ( $KeyFlags , $argv )
    closePrivButton ( "send_msg&write_send_msg_bg&write_send_msg&close_msg" );
EndSub
?>